/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package operaciones;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

/**
 *
 * @author tms
 */
public class funcones {
    Connection conexion;
    public boolean conectar(){
    
    try{
        /*------IMPORTANTE-----
        
        Es necesario importar la libreria de JDBC para crear la conexión con la base de datos,
        esto se hace desde netbeans:
        
        Pasos:
        
        Dar clic derecho en la carpeta de LIBRARIES --> seleccionar ADD JAR/Folder
        --> selccionar el archivo ojdbc5.jar localozado en la carpeta del proyecto
        
        Debera aparecer una nueva libreria con el simbolo de un bote dentro de
        carpeta libraries
        */
        
        /*Vinculo con el conector JDBC --> Si no se agrega la libreria
        No se procesara esta linea */
        Class.forName("oracle.jdbc.OracleDriver"); 
        //Cadena de conexión indicando el puerto de oracle 1521 y la versión XE
        String BaseDeDatos = "jdbc:oracle:thin:@localhost:1521:XE";
        
        //Indicar el no,bre del usuario y contraseña en esta caso
        conexion= DriverManager.getConnection(BaseDeDatos,"proyectoutm","tms");
        if(conexion!=null)
        {
            System.out.println("Conexion exitosa a esquema BASE");
            return true;
        }
        else{
            System.out.println("Conexion fallida");
        }
      }//Fin del try
        catch(Exception e)
        {
        System.out.println("error: " + e);    
        }//Fin del catch
  return false;
    } //Fin del metodo conectar

    public ResultSet consultar(){
       /*
        ResultSet:Almacena todas las finalas retornadas por el select. Proporciona
        acceso a los datos de las filas mediante metodos get.
        Statement: Permite el envio y ejecución de sentencias SQL.
        executeQuery:Método del statement utilizado para ejecutar instrucciones select.
        */
        
        ResultSet rs=null; 
        
        try{      
        String sql="Select * from alumno";
        if (conectar()){
        Statement stt=conexion.createStatement();
        rs=stt.executeQuery(sql);
        }
        return rs;
  }
  catch(Exception e){
    System.out.print("Error al consultar: " + e);
  }
     return rs;
    } //Fin metodo consultar
    
    public String ejecutarProcedimientoguardar(String cur, String contra, String contra2, String nombre, String apellidos,
   int eda, String calle, int nume, String col, int codigopostal, int lad, int telefon, String m, String f, String esta, String municipi,
    String a, String mes, String d, String lunacimiento, String nacionali, String soltero, String casado, String divorsiado,
            String viudo, String titu, String institucion, String carre, String des, String prome, String ing,
            String fra, String basico, String inter, String ava, String duracion, String company, String dce, int dnempre,
            String dcoe, int dcpe, int telmpresa, String puesto, int sueld, String descri, String nombrejefe,
            String puestojefe, String nomr, String dirr, int telreferencia, String ocur, String tiempoco){
 
 
    try{
        if(conectar()){
     /* CallableStatement: Al igual del statement permite la ejecución de
            instrucciones SQL pero con el soporte de parametros de entrada y salida 
            como los manejados en los procedimeintos y funciones.
     */
            
        CallableStatement cs=null;
       // CallableStatement cs=null;
        //Indicamos el nombre del procedimiento a llamar, por cada parametro 
        // que se tenga en el procedimiento se coloca un signo de interrogación
    cs=conexion.prepareCall("BEGIN agrega_alumno(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?); END;");
    /*Se indica el envio de los parametros del procedimiento
    En este caso todos son entrada y se debe de indicar el tipo de dato de cada uno
    por ejemplo el primer parametro es de tipo varchar y hace referencia al id del empleado
    cs.setTipoDeDatoDelParametro(numero_de_parametro,valor_a_guardar)
    */
   
    cs.setString(1, cur);
    cs.setString(2, contra);
    cs.setString(3, contra2);
    cs.setString(4, nombre);
    cs.setString(5, apellidos);
    cs.setInt(6,eda);
    cs.setString(7, calle);
    cs.setInt(8, nume);
    cs.setString(9, col);
    cs.setInt(10, codigopostal);
    cs.setInt(11, lad);
     cs.setInt(12, telefon);
    cs.setString(13, m);
    cs.setString(14, f);
    cs.setString(15, esta);
    cs.setString(16, municipi);
    cs.setString(17, a);
    cs.setString(18, mes);
    cs.setString(19, d);
    cs.setString(20, lunacimiento);
    cs.setString(21, nacionali);
    cs.setString(22, soltero);
    cs.setString(23, casado);
    cs.setString(24, divorsiado);
    cs.setString(25, viudo);
    cs.setString(26, titu);
    cs.setString(27, institucion);
    cs.setString(28, carre);
    cs.setString(29, des);
    cs.setString(30, prome);
    cs.setString(31, ing);
     cs.setString(32, fra);
    cs.setString(33, basico);
    cs.setString(34, inter);
    cs.setString(35, ava);
    cs.setString(36, duracion);
     cs.setString(37, company);
    cs.setString(38, dce);
    cs.setInt(39, dnempre);
    cs.setString(340, dcoe);
    cs.setInt(41, dcpe);
    cs.setInt(42, telmpresa);
    cs.setString(43, puesto);
    cs.setInt(44, sueld);
    cs.setString(45, descri);
     cs.setString(46, nombrejefe);
    cs.setString(47, puestojefe);
    cs.setString(48, nomr);
    cs.setString(49, dirr);
    cs.setInt(50, telreferencia);
     cs.setString(51, ocur);
    cs.setString(52, tiempoco);
    
    
   
    
   //Ejecutamos el procedimeinto
    cs.execute();
    
//cerramos la conexión
    conexion.close();
    }
    return "Registro Guardado";
    }
    catch(Exception e){
    return "Error al ejecutar el procedimiento: " + e;
    }
    }
} //Fin de la clase

